const mongoose = require('mongoose')
const { body, param } = require('express-validator')
const validate = require('../middleware/validate')
const {Article} = require('../model')

exports.createArticle = validate([
  body('article.title').notEmpty().withMessage('标题不能为空'),
  body('article.description').notEmpty().withMessage('描述不能为空'),
  body('article.body').notEmpty().withMessage('内容不能为空'),
])

exports.getArticle = validate([
  validate.isValidObjectId(['params'], 'slug')
  // param('slug').custom(async v=> {
  //   if(!mongoose.isValidObjectId(v)) {
  //     // 异步 返回一个失败的 Promise
  //     return Promise.reject('文章id类型错误')

  //     // 同步 失败
  //     // throw new Error('文章id类型错误')
  //   }
  //   // 同步 成功
  //   // return true
  // })
])

exports.updateArticle = [
  validate([
    validate.isValidObjectId(['params'], 'slug')
  ]),
  // 验证文章是否存在
  async (req,res,next)=>{
    const articleId = req.params.slug
    const article = await Article.findById(articleId)
    if(!article) {
      return res.status(404).end('文章不存在')
    }
    req.article = article
    next()
  },
  // 验证是否是登录用户的文章
  async (req,res,next) => {
    if(req.user._id.toString() !== req.article.author.toString()){
      return res.status(403).end('无权限')
    }
    next()
  }
]

exports.deleteArticle = exports.updateArticle